package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.TalentTemplate;
import org.apache.ibatis.annotations.Param;

/**
 * 人才库模板配置 数据层
 * 
 * @author ruoyi
 */
public interface TalentTemplateMapper
{
    /**
     * 查询人才库模板配置列表
     * 
     * @param talentTemplate 人才库模板配置
     * @return 人才库模板配置集合
     */
    public List<TalentTemplate> selectTalentTemplateList(TalentTemplate talentTemplate);

    /**
     * 通过ID查询人才库模板配置
     * 
     * @param id 主键ID
     * @return 人才库模板配置对象
     */
    public TalentTemplate selectTalentTemplateById(Long id);

    /**
     * 通过岗位ID查询人才库模板配置
     * 
     * @param postId 岗位ID
     * @return 人才库模板配置对象
     */
    public TalentTemplate selectTalentTemplateByPostId(Long postId);

    /**
     * 新增人才库模板配置
     * 
     * @param talentTemplate 人才库模板配置
     * @return 结果
     */
    public int insertTalentTemplate(TalentTemplate talentTemplate);

    /**
     * 修改人才库模板配置
     * 
     * @param talentTemplate 人才库模板配置
     * @return 结果
     */
    public int updateTalentTemplate(TalentTemplate talentTemplate);

    /**
     * 删除人才库模板配置
     * 
     * @param id 主键ID
     * @return 结果
     */
    public int deleteTalentTemplateById(Long id);

    /**
     * 批量删除人才库模板配置
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteTalentTemplateByIds(Long[] ids);

    /**
     * 创建动态模板表
     * 
     * @param tableName 表名
     * @param postName 岗位名称
     * @return 结果
     */
    public int createDynamicTable(@Param("tableName") String tableName, @Param("postName") String postName);

    /**
     * 删除动态模板表
     * 
     * @param tableName 表名
     * @return 结果
     */
    public int dropDynamicTable(@Param("tableName") String tableName);

    /**
     * 添加动态表字段
     * 
     * @param tableName 表名
     * @param fieldName 字段名
     * @param fieldType 字段类型
     * @param fieldLength 字段长度
     * @param fieldComment 字段注释
     * @return 结果
     */
    public int addDynamicColumn(@Param("tableName") String tableName, 
                                @Param("fieldName") String fieldName,
                                @Param("fieldType") String fieldType,
                                @Param("fieldLength") Integer fieldLength,
                                @Param("fieldComment") String fieldComment);

    /**
     * 删除动态表字段
     * 
     * @param tableName 表名
     * @param fieldName 字段名
     * @return 结果
     */
    public int dropDynamicColumn(@Param("tableName") String tableName, @Param("fieldName") String fieldName);

    /**
     * 重命名动态表字段
     * 
     * @param tableName 表名
     * @param oldFieldName 旧字段名
     * @param newFieldName 新字段名
     * @return 结果
     */
    public int renameColumn(@Param("tableName") String tableName, 
                           @Param("oldFieldName") String oldFieldName, 
                           @Param("newFieldName") String newFieldName);

    /**
     * 检查字段是否存在
     * 
     * @param tableName 表名
     * @param fieldName 字段名
     * @return 是否存在
     */
    public boolean checkColumnExists(@Param("tableName") String tableName, @Param("fieldName") String fieldName);

    /**
     * 检查字段是否有数据
     * 
     * @param tableName 表名
     * @param fieldName 字段名
     * @return 结果
     */
    public int checkColumnHasData(@Param("tableName") String tableName, @Param("fieldName") String fieldName);

    /**
     * 查询动态表数据
     * 
     * @param tableName 表名
     * @return 数据列表
     */
    public List<Map<String, Object>> selectDynamicTableData(@Param("tableName") String tableName);

    /**
     * 插入动态表数据
     * 
     * @param tableName 表名
     * @param data 数据Map
     * @return 结果
     */
    public int insertDynamicTableData(@Param("tableName") String tableName, @Param("data") Map<String, Object> data);

    /**
     * 更新动态表数据
     * 
     * @param tableName 表名
     * @param data 数据Map
     * @param id 主键ID
     * @return 结果
     */
    public int updateDynamicTableData(@Param("tableName") String tableName, @Param("data") Map<String, Object> data, @Param("id") Long id);

    /**
     * 删除动态表数据
     * 
     * @param tableName 表名
     * @param id 主键ID
     * @return 结果
     */
    public int deleteDynamicTableData(@Param("tableName") String tableName, @Param("id") Long id);
}

